package com.patterns.chainOfResponsibility.wifelySubmission;

/**
 * Created by Xiao Yiyun on 2017/4/28.
 * 处理者的抽象类
 */
public abstract class Handler {

    //定义三个限定条件，设为常量
    public final static int FATHER_LEVEL_REQUEST = 1;
    public final static int HUSBAND_LEVEL_REQUEST = 2;
    public final static int SON_LEVEL_REQUEST = 3;
    //当前对象的处理级别
    private int level = 0;
    //确定下一个责任人
    private Handler nextHandler = null;
    //回应请求
    protected abstract void response(IWomen women);
    //设置下一个责任人
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
    //通过构造函数具体实现类告诉父类自己的处理级别
    public Handler(int level) {
        this.level = level;
    }
    //一个女性，可能是女儿，妻子或母亲
    //要求逛街，处理请求
    //加final防止子类错误重写
    public final void HandleMessage(IWomen women) {
        //判断该妇女的请求是不是当前处理对象的处理级别
        //如果是的话就进行处理
        if (women.getType() == this.level) {
             this.response(women);
        } else {
            //否则判断是否有下一个处理人
            //如果有的话就传递给他
            //如果没有就执行默认处理
            if (this.nextHandler != null) {
                this.nextHandler.HandleMessage(women);
            } else {
                System.out.println("----没有地方接受请求了，按不同意处理----");
            }
        }

    }

}
